home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 80 / XENIATGM80.iso / Goodies / Blood 2 / Source / data.z / MenuCharacterFiles.cpp < prev    next >
C/C++ Source or Header  |  1999-04-02  |  4KB  |  150 lines

  1. //*************************************************************************
  2. //*************************************************************************
  3. //***** MODULE  : MenuCharacterFiles.cpp
  4. //***** PURPOSE : Blood 2 Character Creation Screen
  5. //***** CREATED : 10/11/98
  6. //*************************************************************************
  7. //*************************************************************************
  8.  
  9. #include "MenuBase.h"
  10. #include "MenuCharacterFiles.h"
  11. #include "MainMenus.h"
  12. #include "MenuCommands.h"
  13. #include "BloodClientShell.h"
  14. #include <stdio.h>
  15. #include <io.h>
  16. #include <direct.h>
  17.  
  18. //*************************************************************************
  19.  
  20. #define        MENU_FILE_FIELD_X        50
  21. #define        MENU_FILE_FIELD_Y        300
  22. #define        MENU_FILE_TEXT_OFFSET_X    50
  23. #define        MENU_FILE_TEXT_OFFSET_Y    28
  24.  
  25. //*************************************************************************
  26.  
  27. CMenuCharacterFiles::CMenuCharacterFiles()
  28. {
  29.     m_szBackground = "interface\\charscreen\\charbackground.pcx";
  30.     m_bBoxFormat = DTRUE;
  31.     m_hFileField = DNULL;
  32. }
  33.  
  34. //*************************************************************************
  35.  
  36. CMenuCharacterFiles::~CMenuCharacterFiles()
  37. {
  38.     // Delete the surface of the file field
  39.     if(m_hFileField)
  40.         { m_pClientDE->DeleteSurface(m_hFileField); m_hFileField = 0; }
  41. }
  42.  
  43. //*************************************************************************
  44.  
  45. void CMenuCharacterFiles::Build()
  46. {
  47.     CMenuBase::Build();
  48.  
  49.     SetOptionPos(MENU_FILE_FIELD_X + MENU_FILE_TEXT_OFFSET_X, MENU_FILE_FIELD_Y + MENU_FILE_TEXT_OFFSET_Y);
  50.     SetItemSpacing(0);
  51.     SetScrollWrap(DFALSE);
  52.  
  53.     // Remove all of the menu options
  54.     RemoveAllOptions();
  55.  
  56.     if(m_nAction == MENU_ACTION_SAVE)
  57.     {
  58.         m_hEdit = AddEditOption("Type the filename:", 0, m_pMainMenus->GetSmallFont(), 135, 16, DNULL);
  59.         m_hEdit->SetText("Default");
  60.     }
  61.     else
  62.         InitFileList("Players");
  63.  
  64.     m_hTransColor = m_pClientDE->SetupColor1(1.0f, 0.0f, 1.0f, DFALSE);
  65.  
  66.     // Delete the surface of the file field
  67.     if(m_hFileField)
  68.         { m_pClientDE->DeleteSurface(m_hFileField); m_hFileField = 0; }
  69.  
  70.     m_hFileField = m_pClientDE->CreateSurfaceFromBitmap("interface/mainmenus/dialog.pcx");
  71. }
  72.  
  73. //*************************************************************************
  74.  
  75. void CMenuCharacterFiles::InitFileList(char *lpszPath)
  76. {
  77.     // Sanity checks...
  78.     if(!lpszPath) return;
  79.     if(lpszPath[0] == '\0') return;
  80.  
  81.     // Change to the given direcotry...
  82.     if(chdir(lpszPath) != 0)
  83.         return;
  84.  
  85.     // Enumerate the available .b2c files and add them to the list box...
  86.     long    hFile;
  87.     struct    _finddata_t fd;
  88.  
  89.     hFile = _findfirst("*.b2c", &fd);
  90.     if (hFile == -1)
  91.         { chdir(".."); return; }
  92.  
  93.     AddTextItemOption(fd.name, MENU_CMD_B2C_FILE, m_pMainMenus->GetSmallFont());
  94.  
  95.     BOOL bContinue = TRUE;
  96.  
  97.     while (bContinue)
  98.     {
  99.         if (_findnext(hFile, &fd) != 0)
  100.             bContinue = FALSE;
  101.         else
  102.             AddTextItemOption(fd.name, MENU_CMD_B2C_FILE, m_pMainMenus->GetSmallFont());
  103.     }
  104.  
  105.     // Restore the directory...
  106.     chdir ("..");
  107. }
  108.  
  109. //*************************************************************************
  110.  
  111. void CMenuCharacterFiles::Render(HSURFACE hDestSurf)
  112. {
  113.     // Render the character screen behind this menu
  114.     m_pParentMenu->Render(hDestSurf);
  115.  
  116.     // Draw the file field box
  117.     m_pClientDE->DrawSurfaceToSurfaceTransparent(hDestSurf, m_hFileField, DNULL, MENU_FILE_FIELD_X, MENU_FILE_FIELD_Y, m_hTransColor);
  118.  
  119.     // Render the list of options
  120.     m_listOption.EnableBoxFormat(m_bBoxFormat);
  121.     m_listOption.Render(hDestSurf);
  122. }
  123.  
  124. //*************************************************************************
  125.  
  126. DDWORD CMenuCharacterFiles::OnCommand(DDWORD dwCommand, DDWORD dwParam1, DDWORD dwParam2)
  127. {    
  128.     CLTGUITextItemCtrl *pCtrl=(CLTGUITextItemCtrl *)m_listOption.GetControl(m_listOption.GetSelectedItem());
  129.  
  130.     if(pCtrl)
  131.     {                
  132.         if(m_nAction == MENU_ACTION_SAVE)
  133.         {
  134.             (m_pMainMenus->GetCharacterSetup())->SaveB2CFile(m_hEdit->GetText());
  135.             m_pMainMenus->SetCurrentMenu(MENU_ID_CHARACTER);
  136.         }
  137.         else if(m_nAction == MENU_ACTION_LOAD)
  138.         {
  139.             (m_pMainMenus->GetCharacterSetup())->LoadB2CFile(m_pClientDE->GetStringData(pCtrl->GetString(0)));
  140.             (m_pMainMenus->GetCharacterSetup())->UpdateScreenFromStruct();
  141.         }
  142.         else if(m_nAction == MENU_ACTION_DELETE)
  143.         {
  144.             (m_pMainMenus->GetCharacterSetup())->DeleteB2CFile(m_pClientDE->GetStringData(pCtrl->GetString(0)));
  145.             m_pMainMenus->SetCurrentMenu(MENU_ID_CHARACTER);
  146.         }
  147.     }
  148.  
  149.     return 0;
  150. }